package day_6_27;

import java.util.ArrayList;
import java.util.List;

public class Main2 {
    /**
     * 54. 螺旋矩阵
     * https://leetcode.cn/problems/spiral-matrix/description/
     */
    public List<Integer> spiralOrder(int[][] matrix) {
        if(matrix.length == 0) {
            return new ArrayList<>();
        }

        List<Integer> ret = new ArrayList<>();
        int left = 0,right = matrix[0].length - 1;
        int top = 0,button = matrix.length - 1;

        while(true) {
            // 从左到右
            for(int i = left;i <= right;i++) {
                ret.add(matrix[top][i]);
            }
            if(++top > button) {
                break;
            }

            // 从上到下
            for(int i = top;i <= button;i++) {
                ret.add(matrix[i][right]);
            }
            if(--right < left) {
                break;
            }

            // 从右到左
            for(int i = right;i >= left;i--) {
                ret.add(matrix[button][i]);
            }
            if(--button < top) {
                break;
            }

            // 从下到上
            for(int i = button;i >= top;i--) {
                ret.add(matrix[i][left]);
            }
            if(++left > right) {
                break;
            }
        }
        return ret;
    }
}
